home *** CD-ROM | disk | FTP | other *** search
/ Aminet 2 / Aminet AMIGA CDROM (1994)(Walnut Creek)[Feb 1994][W.O. 44790-1].iso / Aminet / gfx / opal / OVTestCS.lzh / OpalTest_cs.c < prev    next >
C/C++ Source or Header  |  1993-02-06  |  9KB  |  432 lines

  1. /*
  2.     This is a test that uses the 8-bit palette-mapped mode of OpalVision.  A
  3. few notes:
  4.  
  5.         1.    There seems to be massive glitching in the display in the
  6.             following areas:
  7.                 - between the fourth and fifth vertical column
  8.                 - in the last square on both the first and second rows
  9.                 - in the 5th square across in the 7th row
  10.             This glitching takes the form of 'missing' pixels from the
  11.             display.  Is this a problem with the hardware, or with software?
  12.             Nothing in the code below could possibly cause this - everything
  13.             drawn with simple RectFill24()'s.
  14.  
  15.         2.    SetRGB24() does not seem to work in 8-bit palette-mapped mode.
  16.             I had to substitute a home-brew for it.  If you replace the
  17.             homebrewed SetOpalRGB() with SetRGB24(), an image of grey's
  18.             will be displayed...  This is obviously a software-only bug.
  19.  
  20.         3.    For a different program using the 8-bit palette mapped display,
  21.             I used RGBtoOV.  The documentation does not mention it, but I
  22.             assumed that if you are using only 8-bit or 15-bit mode, then
  23.             the Green and Blue entries in the RGBPlanes array can be left
  24.             blank.  Are there any problems with providing a pointer to only
  25.             the red plane?  Are there any references to the other two in
  26.             the library code, even though they are not needed?
  27.  
  28.     System configuration:
  29.         Amiga 3000 @25 Mhz
  30.         8 megs fast, 2 megs chip
  31.         Workbench v37.67
  32.         Kickstart v37.175
  33.         Opal.library v3.3
  34.  
  35.         OpalVision card
  36.         Mimetics Framebuffer
  37.  
  38.     Alternate palette load and cycling by J Boros 2-7-92
  39. */
  40. #include <stdio.h>
  41. #include <stdlib.h>
  42. #include <string.h>
  43. #include <dos.h>
  44. #include <stddef.h>
  45. #include <opal/opallib.h>
  46. #include <graphics/gfxbase.h>
  47. #include <exec/memory.h>
  48.  
  49. #include <proto/all.h>
  50.  
  51.  
  52. /*    Protos...    */
  53.  
  54. void main(int,char **);
  55. UBYTE InitAll(void);
  56. void Cleanup(UBYTE);
  57.  
  58.  
  59.  
  60. #define PROGRAMNAME        "OpalTest"
  61. #define PROGRAMVERSION    "v0.01"
  62.  
  63. #define SetOpalRGB(i,r,g,b)    { OpalScreen->Palette[(i) * 3] = r;OpalScreen->Palette[(i) * 3 + 1] = g;OpalScreen->Palette[(i) * 3 + 2] = b; }
  64.  
  65. #define max(x,y)    ((x) > (y) ? (x) : (y))
  66. #define min(x,y)    ((x) < (y) ? (x) : (y))
  67.  
  68.  
  69. struct OpalBase *OpalBase = NULL;
  70. struct OpalScreen *OpalScreen;
  71. __far UBYTE *Button = (UBYTE *)0xbfe001;    /* Nasty */
  72.  
  73. const char *VersionString = "$VER: " PROGRAMNAME " " PROGRAMVERSION;
  74.  
  75. UBYTE Colours[256][3] = {
  76.     {   0,  0,  0 },
  77.     {   0, 17,  0 },
  78.     {  17,  0,  0 },
  79.     {  17, 17,  0 },
  80.     {  17, 17, 17 },
  81.     {  34,  0,  0 },
  82.     {  16, 34,  0 },
  83.     {  34, 17,  0 },
  84.     {  34,  0, 17 },
  85.     {  17, 34, 17 },
  86.     {  34, 34,  0 },
  87.     {  47, 17,  3 },
  88.     {  51,  0,  0 },
  89.     {  34, 34, 17 },
  90.     {  51,  0, 17 },
  91.     {  17, 51,  0 },
  92.     {  51, 17, 17 },
  93.     {  51, 34,  0 },
  94.     {  34, 51,  0 },
  95.     {  51, 34, 17 },
  96.     {  41, 51,  9 },
  97.     {  68,  0,  0 },
  98.     {  68,  0, 17 },
  99.     {  68, 17,  8 },
  100.     {  17, 68, 17 },
  101.     {  51, 51, 17 },
  102.     {  68, 34,  0 },
  103.     {  34, 68,  0 },
  104.     {  68, 34, 17 },
  105.     {  36, 68, 14 },
  106.     {  85,  0,  0 },
  107.     {  68, 51,  6 },
  108.     {  85,  0, 17 },
  109.     {  51, 68, 17 },
  110.     {  85, 17,  0 },
  111.     {  85, 17, 17 },
  112.     {  85, 34,  0 },
  113.     {  51, 68, 34 },
  114.     {  85, 34, 17 },
  115.     {  34, 85, 17 },
  116.     {  68, 68,  0 },
  117.     {  68, 68, 17 },
  118.     {  85, 51,  0 },
  119.     {  85, 51, 17 },
  120.     {  68, 68, 34 },
  121.     { 102,  0,  0 },
  122.     {  51, 85, 25 },
  123.     { 102,  0, 17 },
  124.     { 102, 17,  0 },
  125.     {  85, 51, 34 },
  126.     { 102, 17, 17 },
  127.     { 102, 34,  0 },
  128.     {  85, 68,  0 },
  129.     { 102, 34, 17 },
  130.     {  85, 68, 17 },
  131.     {  68, 85, 17 },
  132.     {  85, 68, 34 },
  133.     {  68, 85, 34 },
  134.     { 102, 51, 11 },
  135.     { 119,  0,  0 },
  136.     { 102, 51, 34 },
  137.     { 119, 17,  0 },
  138.     { 119,  0, 17 },
  139.     { 119, 17, 17 },
  140.     { 102, 68, 16 },
  141.     { 119, 34,  0 },
  142.     {  86, 83, 36 },
  143.     { 119, 17, 34 },
  144.     { 119, 34, 17 },
  145.     {  92, 85, 17 },
  146.     { 102, 68, 34 },
  147.     { 119, 51,  0 },
  148.     { 119, 51, 17 },
  149.     { 119, 51, 34 },
  150.     { 136,  0,  0 },
  151.     { 136, 17,  0 },
  152.     { 102, 85, 34 },
  153.     { 136,  0, 17 },
  154.     { 136, 17, 17 },
  155.     { 119, 68, 17 },
  156.     { 136, 34,  0 },
  157.     { 119, 68, 34 },
  158.     { 136, 34, 17 },
  159.     { 136, 17, 34 },
  160.     { 102, 85, 51 },
  161.     { 136, 34, 34 },
  162.     { 136, 51,  0 },
  163.     { 136, 51, 17 },
  164.     { 119, 68, 51 },
  165.     { 119, 85, 17 },
  166.     { 102, 85, 68 },
  167.     { 136, 51, 34 },
  168.     { 119, 85, 39 },
  169.     { 136, 68,  0 },
  170.     { 119, 68, 68 },
  171.     { 136, 68, 17 },
  172.     { 153,  0,  1 },
  173.     { 153, 17,  0 },
  174.     { 153, 17, 17 },
  175.     { 136, 68, 34 },
  176.     { 153, 34, 13 },
  177.     { 102, 85, 85 },
  178.     { 153, 34, 34 },
  179.     { 136, 68, 51 },
  180.     { 119, 85, 68 },
  181.     { 136, 85, 17 },
  182.     { 153, 51, 16 },
  183.     { 138, 82, 36 },
  184.     { 153, 51, 34 },
  185.     { 153, 68, 17 },
  186.     { 136, 85, 51 },
  187.     { 119, 85, 85 },
  188.     { 119,102, 64 },
  189.     { 170, 17,  0 },
  190.     { 153, 68, 34 },
  191.     { 170, 17, 17 },
  192.     { 170, 34,  0 },
  193.     { 136, 85, 68 },
  194.     { 170, 34, 17 },
  195.     { 153, 85, 17 },
  196.     { 170, 34, 34 },
  197.     { 136,102, 51 },
  198.     { 170, 51,  0 },
  199.     { 170, 50, 17 },
  200.     { 153, 85, 34 },
  201.     { 119,102, 85 },
  202.     { 170, 51, 34 },
  203.     { 136, 85, 85 },
  204.     { 153, 85, 51 },
  205.     { 148,102, 34 },
  206.     { 170, 68, 17 },
  207.     { 140,102, 63 },
  208.     { 170, 68, 34 },
  209.     { 153, 85, 68 },
  210.     { 136,102, 85 },
  211.     { 187, 34, 17 },
  212.     { 170, 85, 17 },
  213.     { 170, 85, 34 },
  214.     { 187, 51,  0 },
  215.     { 187, 51, 17 },
  216.     { 153,102, 68 },
  217.     { 187, 51, 34 },
  218.     { 170, 85, 51 },
  219.     { 136,102,102 },
  220.     { 187, 68, 17 },
  221.     { 170,102, 34 },
  222.     { 187, 68, 34 },
  223.     { 170, 85, 68 },
  224.     { 153,102, 85 },
  225.     { 136,119, 94 },
  226.     { 170,102, 51 },
  227.     { 187, 68, 51 },
  228.     { 153,119, 68 },
  229.     { 187, 85, 32 },
  230.     { 170,102, 68 },
  231.     { 153,102,102 },
  232.     { 204, 51, 13 },
  233.     { 153,119, 85 },
  234.     { 187, 85, 52 },
  235.     { 187,102, 17 },
  236.     { 204, 68, 17 },
  237.     { 170,102, 85 },
  238.     { 187,102, 34 },
  239.     { 204, 68, 34 },
  240.     { 170,119, 67 },
  241.     { 187,102, 51 },
  242.     { 153,119,102 },
  243.     { 204, 68, 51 },
  244.     { 204, 85, 17 },
  245.     { 187,119, 17 },
  246.     { 187,102, 68 },
  247.     { 170,119, 85 },
  248.     { 207, 85, 34 },
  249.     { 204, 85, 51 },
  250.     { 204,102, 17 },
  251.     { 187,102, 85 },
  252.     { 204,102, 34 },
  253.     { 187,119, 64 },
  254.     { 170,119,101 },
  255.     { 198,119, 22 },
  256.     { 207, 85, 64 },
  257.     { 204,102, 51 },
  258.     { 221, 68, 51 },
  259.     { 187,119, 85 },
  260.     { 204,102, 68 },
  261.     { 204,119, 34 },
  262.     { 204,119, 51 },
  263.     { 204,102, 85 },
  264.     { 187,119,102 },
  265.     { 204,119, 68 },
  266.     { 221,102, 34 },
  267.     { 187,136, 85 },
  268.     { 221, 85, 68 },
  269.     { 221,101, 51 },
  270.     { 204,136, 51 },
  271.     { 221,119, 17 },
  272.     { 204,119, 87 },
  273.     { 187,136,102 },
  274.     { 221,102, 68 },
  275.     { 221,119, 34 },
  276.     { 204,136, 68 },
  277.     { 238, 85, 34 },
  278.     { 221,119, 51 },
  279.     { 215,136, 34 },
  280.     { 221,102, 85 },
  281.     { 221,119, 68 },
  282.     { 238,102, 34 },
  283.     { 204,153, 68 },
  284.     { 238,102, 52 },
  285.     { 204,136,100 },
  286.     { 221,119, 87 },
  287.     { 232,124, 51 },
  288.     { 221,136, 68 },
  289.     { 204,136,119 },
  290.     { 238,102, 85 },
  291.     { 221,136, 85 },
  292.     { 238,119, 68 },
  293.     { 204,153,102 },
  294.     { 212,153, 85 },
  295.     { 221,136,102 },
  296.     { 204,153,119 },
  297.     { 238,119, 92 },
  298.     { 221,136,119 },
  299.     { 238,136, 85 },
  300.     { 221,153,102 },
  301.     { 255,119, 68 },
  302.     { 238,136,102 },
  303.     { 221,153,119 },
  304.     { 221,170,102 },
  305.     { 255,136, 68 },
  306.     { 239,136,119 },
  307.     { 238,153,102 },
  308.     { 221,153,136 },
  309.     { 255,136, 90 },
  310.     { 221,170,119 },
  311.     { 238,153,119 },
  312.     { 221,170,136 },
  313.     { 240,153,133 },
  314.     { 238,170,119 },
  315.     { 221,170,153 },
  316.     { 237,170,135 },
  317.     { 221,170,170 },
  318.     { 238,187,136 },
  319.     { 238,170,157 },
  320.     { 255,170,136 },
  321.     { 221,170,187 },
  322.     { 238,187,153 },
  323.     { 255,187,136 },
  324.     { 249,192,158 },
  325.     { 238,187,187 },
  326.     { 238,204,187 },
  327.     { 238,221,187 },
  328.     { 255,204,187 },
  329.     { 238,204,212 },
  330.     { 255,204,204 },
  331.     { 238,221,212 },
  332. };
  333.  
  334. void main(argc,argv)
  335. int argc;
  336. char **argv;
  337. {
  338.     register short i;
  339.     UBYTE Error,rl,gl,bl;
  340.     UWORD XCtr,YCtr,k;
  341.     UBYTE CIndex = 0;
  342.     WORD SquareSize = 10;
  343.  
  344.     printf("%s ©1992 The Burning Stickmen \n",VersionString);
  345.     printf(" Color Cycling added 2-3-93 JB  MOUSE BUTTON TO EXIT \n");
  346.     
  347.     if (Error = InitAll()) {
  348.         printf("Could not initialize.  (Error: %d)\n\n",Error);
  349.         Cleanup(1);
  350.     }
  351.  
  352.     SquareSize = min(OpalScreen->Height / 8,OpalScreen->Width / 8);
  353.  
  354. /*    Tiles the screen...    */
  355.  
  356. /* ------  NEW WAY TO PERFORM PALETTE WITH ONE MOVE, RIGHT TO STRUCTURE */
  357.  
  358.      memcpy(&OpalScreen->Palette[0],&Colours[0][0],768);
  359.     
  360.     
  361.     for (YCtr = 0;YCtr < 8;++YCtr) { 
  362.         for (XCtr = 0;XCtr < 12;++XCtr) { /* made wider match aspect ratio */
  363.           SetPen8P(OpalScreen,CIndex);
  364.             RectFill24(OpalScreen,XCtr * SquareSize,YCtr * SquareSize,(XCtr + 1) * SquareSize - 1,(YCtr + 1) * SquareSize - 1);
  365.             ++CIndex;
  366.         }
  367.     }
  368.  
  369.     UpdatePalette24();
  370.     RegWait24();
  371.  
  372.  
  373.     OVPriority();
  374.     Refresh24();
  375.     
  376. /* DEMONSTRATE COLOR CYCLING BY SHIFTING COLORS AND MOVING TOP TO BOTTOM
  377.   NOTE, I LEAVE COLOR 0 ALONE, KEEPS IMAGE FROM JUMPING */
  378.       
  379.     while (*Button &0x040)  { /* try and cycle colours until button pressed */
  380.         rl=OpalScreen->Palette[765]; /* get old top values  R*/
  381.         gl=OpalScreen->Palette[766]; /* get old top values  G*/
  382.         bl=OpalScreen->Palette[767]; /* get old top values B*/
  383.         memmove(&OpalScreen->Palette[6],&OpalScreen->Palette[3],762);
  384.         OpalScreen->Palette[3]=rl; /* leave color 0 alone! */
  385.         OpalScreen->Palette[4]=gl;
  386.         OpalScreen->Palette[5]=bl;
  387.               
  388.         UpdatePalette24(); /* make the changes appear on screen */
  389.         RegWait24();
  390.         Delay(3);
  391.     } /* end of k loop */
  392.     
  393.     
  394.  
  395.     Cleanup(0);
  396. }
  397.  
  398. UBYTE InitAll(void)
  399. {
  400.     if ((OpalBase = (struct OpalBase *)OpenLibrary("opal.library",NULL)) == NULL)
  401.         return(2);
  402.  
  403.     if ((OpalScreen = OpenScreen24(HIRES24|ILACE24|PLANES8|PALMAP24)) == NULL)
  404.         return(FALSE);
  405.  
  406.     StopUpdate24();
  407.     AutoSync24(FALSE);
  408.     AmigaPriority();
  409.     DualDisplay24();
  410.  
  411.     return(0);
  412. }
  413.  
  414. void Cleanup(ExitVal)
  415. UBYTE ExitVal;
  416. {
  417.     if (OpalBase) {
  418.         AmigaPriority();
  419.         SingleDisplay24();
  420.  
  421.         if (OpalScreen) {
  422.             CloseScreen24();
  423.             OpalScreen = NULL;
  424.         }
  425.  
  426.         CloseLibrary((struct Library *)OpalBase);
  427.         OpalBase = NULL;
  428.     }
  429.  
  430.     exit(ExitVal);
  431. }
  432.